// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by sidekick. DO NOT EDIT.

/// A dyn-compatible, crate-private version of [super::ApiHub].
#[async_trait::async_trait]
pub trait ApiHub: std::fmt::Debug + Send + Sync {
    async fn create_api(
        &self,
        req: crate::model::CreateApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Api>>;

    async fn get_api(
        &self,
        req: crate::model::GetApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Api>>;

    async fn list_apis(
        &self,
        req: crate::model::ListApisRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListApisResponse>>;

    async fn update_api(
        &self,
        req: crate::model::UpdateApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Api>>;

    async fn delete_api(
        &self,
        req: crate::model::DeleteApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn create_version(
        &self,
        req: crate::model::CreateVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Version>>;

    async fn get_version(
        &self,
        req: crate::model::GetVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Version>>;

    async fn list_versions(
        &self,
        req: crate::model::ListVersionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListVersionsResponse>>;

    async fn update_version(
        &self,
        req: crate::model::UpdateVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Version>>;

    async fn delete_version(
        &self,
        req: crate::model::DeleteVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn create_spec(
        &self,
        req: crate::model::CreateSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Spec>>;

    async fn get_spec(
        &self,
        req: crate::model::GetSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Spec>>;

    async fn get_spec_contents(
        &self,
        req: crate::model::GetSpecContentsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::SpecContents>>;

    async fn list_specs(
        &self,
        req: crate::model::ListSpecsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListSpecsResponse>>;

    async fn update_spec(
        &self,
        req: crate::model::UpdateSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Spec>>;

    async fn delete_spec(
        &self,
        req: crate::model::DeleteSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn create_api_operation(
        &self,
        req: crate::model::CreateApiOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ApiOperation>>;

    async fn get_api_operation(
        &self,
        req: crate::model::GetApiOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ApiOperation>>;

    async fn list_api_operations(
        &self,
        req: crate::model::ListApiOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListApiOperationsResponse>>;

    async fn update_api_operation(
        &self,
        req: crate::model::UpdateApiOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ApiOperation>>;

    async fn delete_api_operation(
        &self,
        req: crate::model::DeleteApiOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn get_definition(
        &self,
        req: crate::model::GetDefinitionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Definition>>;

    async fn create_deployment(
        &self,
        req: crate::model::CreateDeploymentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Deployment>>;

    async fn get_deployment(
        &self,
        req: crate::model::GetDeploymentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Deployment>>;

    async fn list_deployments(
        &self,
        req: crate::model::ListDeploymentsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDeploymentsResponse>>;

    async fn update_deployment(
        &self,
        req: crate::model::UpdateDeploymentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Deployment>>;

    async fn delete_deployment(
        &self,
        req: crate::model::DeleteDeploymentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn create_attribute(
        &self,
        req: crate::model::CreateAttributeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Attribute>>;

    async fn get_attribute(
        &self,
        req: crate::model::GetAttributeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Attribute>>;

    async fn update_attribute(
        &self,
        req: crate::model::UpdateAttributeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Attribute>>;

    async fn delete_attribute(
        &self,
        req: crate::model::DeleteAttributeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_attributes(
        &self,
        req: crate::model::ListAttributesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAttributesResponse>>;

    async fn search_resources(
        &self,
        req: crate::model::SearchResourcesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::SearchResourcesResponse>>;

    async fn create_external_api(
        &self,
        req: crate::model::CreateExternalApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ExternalApi>>;

    async fn get_external_api(
        &self,
        req: crate::model::GetExternalApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ExternalApi>>;

    async fn update_external_api(
        &self,
        req: crate::model::UpdateExternalApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ExternalApi>>;

    async fn delete_external_api(
        &self,
        req: crate::model::DeleteExternalApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_external_apis(
        &self,
        req: crate::model::ListExternalApisRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListExternalApisResponse>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::ApiHub] also implement [ApiHub].
#[async_trait::async_trait]
impl<T: super::ApiHub> ApiHub for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn create_api(
        &self,
        req: crate::model::CreateApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Api>> {
        T::create_api(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_api(
        &self,
        req: crate::model::GetApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Api>> {
        T::get_api(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_apis(
        &self,
        req: crate::model::ListApisRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListApisResponse>> {
        T::list_apis(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_api(
        &self,
        req: crate::model::UpdateApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Api>> {
        T::update_api(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_api(
        &self,
        req: crate::model::DeleteApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_api(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_version(
        &self,
        req: crate::model::CreateVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Version>> {
        T::create_version(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_version(
        &self,
        req: crate::model::GetVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Version>> {
        T::get_version(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_versions(
        &self,
        req: crate::model::ListVersionsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListVersionsResponse>> {
        T::list_versions(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_version(
        &self,
        req: crate::model::UpdateVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Version>> {
        T::update_version(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_version(
        &self,
        req: crate::model::DeleteVersionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_version(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_spec(
        &self,
        req: crate::model::CreateSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Spec>> {
        T::create_spec(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_spec(
        &self,
        req: crate::model::GetSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Spec>> {
        T::get_spec(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_spec_contents(
        &self,
        req: crate::model::GetSpecContentsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::SpecContents>> {
        T::get_spec_contents(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_specs(
        &self,
        req: crate::model::ListSpecsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListSpecsResponse>> {
        T::list_specs(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_spec(
        &self,
        req: crate::model::UpdateSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Spec>> {
        T::update_spec(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_spec(
        &self,
        req: crate::model::DeleteSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_spec(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_api_operation(
        &self,
        req: crate::model::CreateApiOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ApiOperation>> {
        T::create_api_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_api_operation(
        &self,
        req: crate::model::GetApiOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ApiOperation>> {
        T::get_api_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_api_operations(
        &self,
        req: crate::model::ListApiOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListApiOperationsResponse>> {
        T::list_api_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_api_operation(
        &self,
        req: crate::model::UpdateApiOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ApiOperation>> {
        T::update_api_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_api_operation(
        &self,
        req: crate::model::DeleteApiOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_api_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_definition(
        &self,
        req: crate::model::GetDefinitionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Definition>> {
        T::get_definition(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_deployment(
        &self,
        req: crate::model::CreateDeploymentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Deployment>> {
        T::create_deployment(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_deployment(
        &self,
        req: crate::model::GetDeploymentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Deployment>> {
        T::get_deployment(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_deployments(
        &self,
        req: crate::model::ListDeploymentsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDeploymentsResponse>> {
        T::list_deployments(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_deployment(
        &self,
        req: crate::model::UpdateDeploymentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Deployment>> {
        T::update_deployment(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_deployment(
        &self,
        req: crate::model::DeleteDeploymentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_deployment(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_attribute(
        &self,
        req: crate::model::CreateAttributeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Attribute>> {
        T::create_attribute(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_attribute(
        &self,
        req: crate::model::GetAttributeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Attribute>> {
        T::get_attribute(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_attribute(
        &self,
        req: crate::model::UpdateAttributeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Attribute>> {
        T::update_attribute(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_attribute(
        &self,
        req: crate::model::DeleteAttributeRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_attribute(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_attributes(
        &self,
        req: crate::model::ListAttributesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListAttributesResponse>> {
        T::list_attributes(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn search_resources(
        &self,
        req: crate::model::SearchResourcesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::SearchResourcesResponse>> {
        T::search_resources(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_external_api(
        &self,
        req: crate::model::CreateExternalApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ExternalApi>> {
        T::create_external_api(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_external_api(
        &self,
        req: crate::model::GetExternalApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ExternalApi>> {
        T::get_external_api(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_external_api(
        &self,
        req: crate::model::UpdateExternalApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ExternalApi>> {
        T::update_external_api(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_external_api(
        &self,
        req: crate::model::DeleteExternalApiRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_external_api(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_external_apis(
        &self,
        req: crate::model::ListExternalApisRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListExternalApisResponse>> {
        T::list_external_apis(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::ApiHubDependencies].
#[async_trait::async_trait]
pub trait ApiHubDependencies: std::fmt::Debug + Send + Sync {
    async fn create_dependency(
        &self,
        req: crate::model::CreateDependencyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dependency>>;

    async fn get_dependency(
        &self,
        req: crate::model::GetDependencyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dependency>>;

    async fn update_dependency(
        &self,
        req: crate::model::UpdateDependencyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dependency>>;

    async fn delete_dependency(
        &self,
        req: crate::model::DeleteDependencyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_dependencies(
        &self,
        req: crate::model::ListDependenciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDependenciesResponse>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::ApiHubDependencies] also implement [ApiHubDependencies].
#[async_trait::async_trait]
impl<T: super::ApiHubDependencies> ApiHubDependencies for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn create_dependency(
        &self,
        req: crate::model::CreateDependencyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dependency>> {
        T::create_dependency(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_dependency(
        &self,
        req: crate::model::GetDependencyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dependency>> {
        T::get_dependency(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_dependency(
        &self,
        req: crate::model::UpdateDependencyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dependency>> {
        T::update_dependency(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_dependency(
        &self,
        req: crate::model::DeleteDependencyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_dependency(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_dependencies(
        &self,
        req: crate::model::ListDependenciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDependenciesResponse>> {
        T::list_dependencies(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::ApiHubCollect].
#[async_trait::async_trait]
pub trait ApiHubCollect: std::fmt::Debug + Send + Sync {
    async fn collect_api_data(
        &self,
        req: crate::model::CollectApiDataRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy>;

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy>;
}

/// All implementations of [super::ApiHubCollect] also implement [ApiHubCollect].
#[async_trait::async_trait]
impl<T: super::ApiHubCollect> ApiHubCollect for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn collect_api_data(
        &self,
        req: crate::model::CollectApiDataRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::collect_api_data(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy> {
        T::get_polling_error_policy(self, options)
    }

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy> {
        T::get_polling_backoff_policy(self, options)
    }
}

/// A dyn-compatible, crate-private version of [super::ApiHubCurate].
#[async_trait::async_trait]
pub trait ApiHubCurate: std::fmt::Debug + Send + Sync {
    async fn create_curation(
        &self,
        req: crate::model::CreateCurationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Curation>>;

    async fn get_curation(
        &self,
        req: crate::model::GetCurationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Curation>>;

    async fn list_curations(
        &self,
        req: crate::model::ListCurationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListCurationsResponse>>;

    async fn update_curation(
        &self,
        req: crate::model::UpdateCurationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Curation>>;

    async fn delete_curation(
        &self,
        req: crate::model::DeleteCurationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::ApiHubCurate] also implement [ApiHubCurate].
#[async_trait::async_trait]
impl<T: super::ApiHubCurate> ApiHubCurate for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn create_curation(
        &self,
        req: crate::model::CreateCurationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Curation>> {
        T::create_curation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_curation(
        &self,
        req: crate::model::GetCurationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Curation>> {
        T::get_curation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_curations(
        &self,
        req: crate::model::ListCurationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListCurationsResponse>> {
        T::list_curations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_curation(
        &self,
        req: crate::model::UpdateCurationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Curation>> {
        T::update_curation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_curation(
        &self,
        req: crate::model::DeleteCurationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_curation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::ApiHubDiscovery].
#[async_trait::async_trait]
pub trait ApiHubDiscovery: std::fmt::Debug + Send + Sync {
    async fn list_discovered_api_observations(
        &self,
        req: crate::model::ListDiscoveredApiObservationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDiscoveredApiObservationsResponse>>;

    async fn get_discovered_api_observation(
        &self,
        req: crate::model::GetDiscoveredApiObservationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::DiscoveredApiObservation>>;

    async fn list_discovered_api_operations(
        &self,
        req: crate::model::ListDiscoveredApiOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDiscoveredApiOperationsResponse>>;

    async fn get_discovered_api_operation(
        &self,
        req: crate::model::GetDiscoveredApiOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::DiscoveredApiOperation>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::ApiHubDiscovery] also implement [ApiHubDiscovery].
#[async_trait::async_trait]
impl<T: super::ApiHubDiscovery> ApiHubDiscovery for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_discovered_api_observations(
        &self,
        req: crate::model::ListDiscoveredApiObservationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDiscoveredApiObservationsResponse>>
    {
        T::list_discovered_api_observations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_discovered_api_observation(
        &self,
        req: crate::model::GetDiscoveredApiObservationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::DiscoveredApiObservation>> {
        T::get_discovered_api_observation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_discovered_api_operations(
        &self,
        req: crate::model::ListDiscoveredApiOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDiscoveredApiOperationsResponse>>
    {
        T::list_discovered_api_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_discovered_api_operation(
        &self,
        req: crate::model::GetDiscoveredApiOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::DiscoveredApiOperation>> {
        T::get_discovered_api_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::HostProjectRegistrationService].
#[async_trait::async_trait]
pub trait HostProjectRegistrationService: std::fmt::Debug + Send + Sync {
    async fn create_host_project_registration(
        &self,
        req: crate::model::CreateHostProjectRegistrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::HostProjectRegistration>>;

    async fn get_host_project_registration(
        &self,
        req: crate::model::GetHostProjectRegistrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::HostProjectRegistration>>;

    async fn list_host_project_registrations(
        &self,
        req: crate::model::ListHostProjectRegistrationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListHostProjectRegistrationsResponse>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::HostProjectRegistrationService] also implement [HostProjectRegistrationService].
#[async_trait::async_trait]
impl<T: super::HostProjectRegistrationService> HostProjectRegistrationService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn create_host_project_registration(
        &self,
        req: crate::model::CreateHostProjectRegistrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::HostProjectRegistration>> {
        T::create_host_project_registration(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_host_project_registration(
        &self,
        req: crate::model::GetHostProjectRegistrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::HostProjectRegistration>> {
        T::get_host_project_registration(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_host_project_registrations(
        &self,
        req: crate::model::ListHostProjectRegistrationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListHostProjectRegistrationsResponse>>
    {
        T::list_host_project_registrations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::LintingService].
#[async_trait::async_trait]
pub trait LintingService: std::fmt::Debug + Send + Sync {
    async fn get_style_guide(
        &self,
        req: crate::model::GetStyleGuideRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::StyleGuide>>;

    async fn update_style_guide(
        &self,
        req: crate::model::UpdateStyleGuideRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::StyleGuide>>;

    async fn get_style_guide_contents(
        &self,
        req: crate::model::GetStyleGuideContentsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::StyleGuideContents>>;

    async fn lint_spec(
        &self,
        req: crate::model::LintSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::LintingService] also implement [LintingService].
#[async_trait::async_trait]
impl<T: super::LintingService> LintingService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn get_style_guide(
        &self,
        req: crate::model::GetStyleGuideRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::StyleGuide>> {
        T::get_style_guide(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_style_guide(
        &self,
        req: crate::model::UpdateStyleGuideRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::StyleGuide>> {
        T::update_style_guide(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_style_guide_contents(
        &self,
        req: crate::model::GetStyleGuideContentsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::StyleGuideContents>> {
        T::get_style_guide_contents(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn lint_spec(
        &self,
        req: crate::model::LintSpecRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::lint_spec(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::ApiHubPlugin].
#[async_trait::async_trait]
pub trait ApiHubPlugin: std::fmt::Debug + Send + Sync {
    async fn get_plugin(
        &self,
        req: crate::model::GetPluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Plugin>>;

    async fn enable_plugin(
        &self,
        req: crate::model::EnablePluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Plugin>>;

    async fn disable_plugin(
        &self,
        req: crate::model::DisablePluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Plugin>>;

    async fn create_plugin(
        &self,
        req: crate::model::CreatePluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Plugin>>;

    async fn list_plugins(
        &self,
        req: crate::model::ListPluginsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListPluginsResponse>>;

    async fn delete_plugin(
        &self,
        req: crate::model::DeletePluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_plugin_instance(
        &self,
        req: crate::model::CreatePluginInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn execute_plugin_instance_action(
        &self,
        req: crate::model::ExecutePluginInstanceActionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn get_plugin_instance(
        &self,
        req: crate::model::GetPluginInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PluginInstance>>;

    async fn list_plugin_instances(
        &self,
        req: crate::model::ListPluginInstancesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListPluginInstancesResponse>>;

    async fn enable_plugin_instance_action(
        &self,
        req: crate::model::EnablePluginInstanceActionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn disable_plugin_instance_action(
        &self,
        req: crate::model::DisablePluginInstanceActionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_plugin_instance(
        &self,
        req: crate::model::UpdatePluginInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PluginInstance>>;

    async fn delete_plugin_instance(
        &self,
        req: crate::model::DeletePluginInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy>;

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy>;
}

/// All implementations of [super::ApiHubPlugin] also implement [ApiHubPlugin].
#[async_trait::async_trait]
impl<T: super::ApiHubPlugin> ApiHubPlugin for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn get_plugin(
        &self,
        req: crate::model::GetPluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Plugin>> {
        T::get_plugin(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn enable_plugin(
        &self,
        req: crate::model::EnablePluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Plugin>> {
        T::enable_plugin(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn disable_plugin(
        &self,
        req: crate::model::DisablePluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Plugin>> {
        T::disable_plugin(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_plugin(
        &self,
        req: crate::model::CreatePluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Plugin>> {
        T::create_plugin(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_plugins(
        &self,
        req: crate::model::ListPluginsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListPluginsResponse>> {
        T::list_plugins(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_plugin(
        &self,
        req: crate::model::DeletePluginRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_plugin(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_plugin_instance(
        &self,
        req: crate::model::CreatePluginInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_plugin_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn execute_plugin_instance_action(
        &self,
        req: crate::model::ExecutePluginInstanceActionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::execute_plugin_instance_action(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_plugin_instance(
        &self,
        req: crate::model::GetPluginInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PluginInstance>> {
        T::get_plugin_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_plugin_instances(
        &self,
        req: crate::model::ListPluginInstancesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListPluginInstancesResponse>> {
        T::list_plugin_instances(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn enable_plugin_instance_action(
        &self,
        req: crate::model::EnablePluginInstanceActionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::enable_plugin_instance_action(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn disable_plugin_instance_action(
        &self,
        req: crate::model::DisablePluginInstanceActionRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::disable_plugin_instance_action(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_plugin_instance(
        &self,
        req: crate::model::UpdatePluginInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::PluginInstance>> {
        T::update_plugin_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_plugin_instance(
        &self,
        req: crate::model::DeletePluginInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_plugin_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy> {
        T::get_polling_error_policy(self, options)
    }

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy> {
        T::get_polling_backoff_policy(self, options)
    }
}

/// A dyn-compatible, crate-private version of [super::Provisioning].
#[async_trait::async_trait]
pub trait Provisioning: std::fmt::Debug + Send + Sync {
    async fn create_api_hub_instance(
        &self,
        req: crate::model::CreateApiHubInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_api_hub_instance(
        &self,
        req: crate::model::DeleteApiHubInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn get_api_hub_instance(
        &self,
        req: crate::model::GetApiHubInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ApiHubInstance>>;

    async fn lookup_api_hub_instance(
        &self,
        req: crate::model::LookupApiHubInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::LookupApiHubInstanceResponse>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy>;

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy>;
}

/// All implementations of [super::Provisioning] also implement [Provisioning].
#[async_trait::async_trait]
impl<T: super::Provisioning> Provisioning for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn create_api_hub_instance(
        &self,
        req: crate::model::CreateApiHubInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_api_hub_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_api_hub_instance(
        &self,
        req: crate::model::DeleteApiHubInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_api_hub_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_api_hub_instance(
        &self,
        req: crate::model::GetApiHubInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ApiHubInstance>> {
        T::get_api_hub_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn lookup_api_hub_instance(
        &self,
        req: crate::model::LookupApiHubInstanceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::LookupApiHubInstanceResponse>> {
        T::lookup_api_hub_instance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy> {
        T::get_polling_error_policy(self, options)
    }

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy> {
        T::get_polling_backoff_policy(self, options)
    }
}

/// A dyn-compatible, crate-private version of [super::RuntimeProjectAttachmentService].
#[async_trait::async_trait]
pub trait RuntimeProjectAttachmentService: std::fmt::Debug + Send + Sync {
    async fn create_runtime_project_attachment(
        &self,
        req: crate::model::CreateRuntimeProjectAttachmentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::RuntimeProjectAttachment>>;

    async fn get_runtime_project_attachment(
        &self,
        req: crate::model::GetRuntimeProjectAttachmentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::RuntimeProjectAttachment>>;

    async fn list_runtime_project_attachments(
        &self,
        req: crate::model::ListRuntimeProjectAttachmentsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListRuntimeProjectAttachmentsResponse>>;

    async fn delete_runtime_project_attachment(
        &self,
        req: crate::model::DeleteRuntimeProjectAttachmentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn lookup_runtime_project_attachment(
        &self,
        req: crate::model::LookupRuntimeProjectAttachmentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::LookupRuntimeProjectAttachmentResponse>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::RuntimeProjectAttachmentService] also implement [RuntimeProjectAttachmentService].
#[async_trait::async_trait]
impl<T: super::RuntimeProjectAttachmentService> RuntimeProjectAttachmentService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn create_runtime_project_attachment(
        &self,
        req: crate::model::CreateRuntimeProjectAttachmentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::RuntimeProjectAttachment>> {
        T::create_runtime_project_attachment(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_runtime_project_attachment(
        &self,
        req: crate::model::GetRuntimeProjectAttachmentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::RuntimeProjectAttachment>> {
        T::get_runtime_project_attachment(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_runtime_project_attachments(
        &self,
        req: crate::model::ListRuntimeProjectAttachmentsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListRuntimeProjectAttachmentsResponse>>
    {
        T::list_runtime_project_attachments(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_runtime_project_attachment(
        &self,
        req: crate::model::DeleteRuntimeProjectAttachmentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_runtime_project_attachment(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn lookup_runtime_project_attachment(
        &self,
        req: crate::model::LookupRuntimeProjectAttachmentRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::LookupRuntimeProjectAttachmentResponse>>
    {
        T::lookup_runtime_project_attachment(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }
}
